/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.apuntesdejava.demoswingdbapp.dao.derby;

import com.apuntesdejava.demoswingdbapp.bean.Product;
import com.apuntesdejava.demoswingdbapp.dao.ProductDao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

/**
 *
 * @author dsilva
 */
public class DerbyProductDao implements ProductDao {

    private JdbcTemplate jdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    /**
     * Ejecuta una consulta a PRODUCT filtrando los que tengan el campo
     * PRODUCT_CODE igual al argumento del método
     *
     * @param code
     * @return
     */
    @Override
    public List<Product> findProductByProductCode(String code) {
        List<Product> list = jdbcTemplate.query("SELECT * FROM APP.PRODUCT WHERE PRODUCT_CODE = ?",  //la consulta
                new Object[]{code},  //el argumento a la consulta
                new ProductRowMapper()); //el mapeador que converite el resultset a objeto
        return list; //retorna la lista de los objetos
    }
}

/**
 * Clase que mapea el resultado de un ResultSet para crear un objeto Product
 *
 * @author dsilva
 */
class ProductRowMapper implements RowMapper<Product> {

    @Override
    public Product mapRow(ResultSet rs, int i) throws SQLException {
        Product p = new Product();
        p.setProductId(rs.getInt("PRODUCT_ID"));
        p.setDescription(rs.getString("DESCRIPTION"));
        p.setProductCode(rs.getString("PRODUCT_CODE"));
        return p;
    }
}